﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ComunesMGI.DataTypes;
using ClienteWinMGI.Logica;
using ComunesMGI.Constantes;


namespace ClienteWinMGI.Presentacion
{
    public partial class AltaWorkPackage : Form
    {
        private DataCliente _cliente;
        private DataSistema _sistema;

        public AltaWorkPackage()
        {
            InitializeComponent();
            cargarClientes();
            dateTPFechaIni.MinDate = DateTime.Today;
            dateTPFechaEstFin.MinDate = DateTime.Today;
        }

        private void clearValidator()
        {
            imgValidator.Visible = false;
            lblValidator.Visible = false;
        }

        private void showValidator(string textoValidator)
        {
            imgValidator.Visible = true;
            lblValidator.Visible = true;
            lblValidator.Text = textoValidator;
        }

        private void grBoxExtras_Enter(object sender, EventArgs e)
        {
           
        }


        private void cargarClientes()
        {
            
            try
            {
                IClientes iClientes = LogicaFactory.getInstance().getIClientes();
                List<DataCliente> listaClientes = iClientes.getClientes();
                foreach (DataCliente dc in listaClientes)
                {
                    cboCliente.Items.Add(dc.Nombre);
                }
                cboCliente.SelectedIndex = -1;

            }
            catch(Exception ex)
            {
                showValidator(ex.Message);

            }

        }  
        private void btnIngresar_Click(object sender, EventArgs e)
        {
            if (cboCliente.SelectedIndex == -1)
            {
                showValidator("Debe ingresar un cliente");
            }
            else
            {
                if (cboSistema.SelectedIndex == -1)
                {
                    showValidator("Debe ingresar un sistema");
                }
                else
                {
                    if (txtNombre.Text == "")
                    {
                        showValidator("Debe ingresar el nombre del Work Package");
                    }
                    else
                    {
                        try
                        {
                            clearValidator();
                            //En este caso es que voy a llamar a la funcion addWorkPackage
                            LogicaFactory lf = LogicaFactory.getInstance();
                            IIncidentes ii = lf.getIIncidentes();
                            if (chkFin.Checked && chkIni.Checked)
                            {
                                DataWP datosWorkPackage = new DataWP(txtNombre.Text, dateTPFechaIni.Value, dateTPFechaEstFin.Value);
                                ii.addWorkPackage(_cliente, _sistema, datosWorkPackage);
                            }
                            else
                            {
                                if (chkFin.Checked)
                                {
                                    DateTime tNulaIni = ConstantesMGI.FechaVacia;
                                    DataWP datosWorkPackage = new DataWP(txtNombre.Text, tNulaIni, dateTPFechaEstFin.Value);
                                    ii.addWorkPackage(_cliente, _sistema, datosWorkPackage);
                                }
                                else
                                {
                                    if (chkIni.Checked)
                                    {
                                        DateTime tNulaFin = ConstantesMGI.FechaVacia;
                                        DataWP datosWorkPackage = new DataWP(txtNombre.Text, dateTPFechaIni.Value, tNulaFin);
                                        ii.addWorkPackage(_cliente, _sistema, datosWorkPackage);
                                    }
                                }
                            }
                            Notificacion notificacion = new Notificacion("Ingreso exitoso", "Alta de Work Package exitosa", "Se ha dado de alta el Work Package con nombre "+ txtNombre.Text +".");
                            notificacion.ShowDialog();
                           

                        }
                        catch (Exception ex) {
                            Error err = new Error("Error", "", ex.Message);
                        }
                    }
                    
                }
            }
        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void AltaWorkPackage_Load(object sender, EventArgs e)
        {

        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {

        }

        private void dateTPFechaIni_ValueChanged(object sender, EventArgs e)
        {
            
        }

        private void dateTPFechaEstFin_ValueChanged(object sender, EventArgs e)
        {

        }

        private void cboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cboCliente.SelectedIndex != -1)
                {
                    //vacio el combo de los sistemas
                    cboSistema.Items.Clear();

                    //limpio el validador
                    clearValidator();
                    txtNombre.Text = "";

                    string nombreCliente = cboCliente.SelectedItem.ToString();
                    _cliente = new DataCliente(nombreCliente);
                    LogicaFactory fabrica = LogicaFactory.getInstance();
                    ISistemas sist = fabrica.getISistemas();
                    List<DataSistema> lista = sist.getSistemas(_cliente);
                    int largo = lista.Count();
                    if (largo == 0)
                    {
                        //el cliente no tiene sistmas
                        showValidator("El cliente seleccionado no tiene sistemas");
                        this._cliente = null;

                    }
                    else
                    {
                        for (int i = 0; i < lista.Count(); i++)
                        {
                            DataSistema dataSist = lista[i];
                            string item = " Nombre=" + dataSist.Nombre + ";" + "Sitio=" + dataSist.Sitio;
                            cboSistema.Items.Add(item);
                        }
                        cboSistema.SelectedIndex = -1;
                        cboSistema.Enabled = true;
                        txtNombre.Enabled = false;
                        chkIni.Checked = false;
                        chkFin.Checked = false;
                        chkIni.Enabled = false;
                        chkFin.Enabled = false;

                    }

                }
            }
            catch (Exception ex)
            {
                Error error = new Error("Error", "Error al cargar los sistemas", ex.Message);
                error.ShowDialog();
                cboCliente.SelectedIndex = -1;
            }
        }

        private void cboSistema_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cboSistema.SelectedIndex != -1)
                {
                    clearValidator();
                    string datoSistema = cboSistema.SelectedItem.ToString();
                    char[] delimitador = { '=', ';' };

                    string[] palabras = datoSistema.Split(delimitador);
                    string nombre = palabras[1];
                    string sitio = palabras[3];
                    _sistema = new DataSistema(nombre, sitio);

                    txtNombre.Clear();
                    txtNombre.Enabled = true;
                    chkIni.Enabled = true;
                    chkFin.Enabled = true;
                    chkIni.Checked = false;
                    chkFin.Checked = false;
                    dateTPFechaIni.Enabled = false;
                    dateTPFechaEstFin.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                clearValidator();
                showValidator(ex.Message);
            }
        }

        private void tableLayoutPanel4_Paint(object sender, PaintEventArgs e)
        {

        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void lblNombre_Click(object sender, EventArgs e)
        {

        }

        private void txtNombre_TextChanged(object sender, EventArgs e)
        {
            clearValidator();
        }

        private void rbtnFechaInicio_CheckedChanged(object sender, EventArgs e)
        {
           
        }

        private void rbtnFF_CheckedChanged(object sender, EventArgs e)
        {
            
        }

        private void chkIni_CheckedChanged(object sender, EventArgs e)
        {
            if (chkIni.Checked)
            {
                dateTPFechaIni.Enabled = true;
            }
            else 
            {
                dateTPFechaIni.Enabled = false;
            }
        }

        private void chkFin_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFin.Checked)
            {
                dateTPFechaEstFin.Enabled = true;
            }
            else
            {
                dateTPFechaEstFin.Enabled = false;
            }
        }
    }
}
